package com.star.news.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.star.news.dto.NewsPageWebDTO;
import com.star.news.dto.NewsSaveDTO;
import com.star.news.dto.NewsUpdateDTO;
import com.star.news.entity.News;
import com.star.news.vo.NewsDetailVO;
import com.star.news.vo.NewsDetailWebVO;
import com.star.news.vo.NewsDetailWxappVO;
import com.star.news.vo.NewsVO;

import java.util.List;

/**
 * 新闻服务类
 *
 * @author lintianyi
 * @version 1.0
 * @date 2024/6/21 15:58
 */
public interface NewsService extends IService<News> {
    /**
     * 保存
     *
     * @param dto
     */
    void save(NewsSaveDTO dto);

    /**
     * 修改
     *
     * @param dto
     */
    void update(NewsUpdateDTO dto);

    /**
     * 修改发布和置顶状态
     *
     * @param dto
     */
    void updateStatus(NewsUpdateDTO dto);

    /**
     * 删除
     *
     * @param ids
     */
    void deleteByIds(List<Long> ids);

    /**
     * 列表查询
     *
     * @param dto
     * @return
     */
    IPage<NewsVO> page(NewsUpdateDTO dto);

    /**
     * 获取详情
     *
     * @return
     */
    NewsDetailVO getDetail(Long id);

    /**
     * 小程序获取详情
     *
     * @return
     */
    NewsDetailWxappVO getDetailWxapp(Long id);

    /**
     * 小程序获取新闻列表
     *
     * @param type
     * @param title
     * @return
     */
    List<News> ListWxapp(Integer type, String title);

    /**
     * web端获取按最新时间展示前三个新闻列表
     *
     * @return
     */
    List<News> listWebTop3();

    /**
     * web端获取新闻列表
     *
     * @return
     */
    IPage<News> pageWeb(NewsPageWebDTO dto);

    /**
     * web端获取详情
     *
     * @return
     */
    NewsDetailWebVO getDetailWeb(Long id);

    /**
     * 更新浏览次数
     * @param id
     */
    void updatePageView(Long id);

    //-------------------- 以下通用接口 --------------------

    /**
     * 获取艺人最新一条新闻-通用
     *
     * @param starId 艺人ID
     * @return {@link NewsVO}
     */
    NewsVO getLatestByStarId(Long starId);

    /**
     * 列表艺人最新的新闻top
     *
     * @param starId 艺人ID
     * @param limit  限度
     * @return {@link List}<{@link NewsVO}>
     */
    List<NewsVO> listLatestByStarId(Long starId, int limit);
}
